package com.xiaozheng.dao.impl;

import com.xiaozheng.dao.UserDao;
import com.xiaozheng.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

/**
 * @Package: com.xiaozheng.dao.impl
 * @ClassName: UserDaoImpl
 * @Author: 小政同学    QQ:xiaozheng666888@qq.com
 * @CreateTime: 2020/8/30 22:26
 * @What_is_this_file_for: 这个文件是用来做什么的?
 * @Description: 描述
 */
public class UserDaoImpl implements UserDao {
    private SqlSessionFactory factory;
    public UserDaoImpl(SqlSessionFactory factory) {
        //接收工厂
        this.factory = factory;
    }


    /**
     * 查询所有用户
     *
     * @return
     */
    @Override
    public List<User> findAll() {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession 中的方法
        List<User> user = session.selectList("com.xiaozheng.dao.UserDao.findAll");//参数结束能获取配置信息的K
        session.close();
        return user;
    }

    /**
     * 保存用户
     *
     * @param user
     */
    @Override
    public void saveUser(User user) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession 中的方法
        session.insert("com.xiaozheng.dao.UserDao.saveUser",user);//参数结束能获取配置信息的K
        //3.提交事务
        session.commit();
        session.close();
    }

    /**
     * 更新用户
     *
     * @param user
     */
    @Override
    public void updateUser(User user) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession 中的方法
        session.update("com.xiaozheng.dao.UserDao.updateUser",user);//参数结束能获取配置信息的K
        //3.提交事务
        session.commit();
        session.close();

    }

    /**
     * 根据id删除用户
     *
     * @param UserId
     */
    @Override
    public void deleteUser(Integer UserId) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession 中的方法
        session.delete("com.xiaozheng.dao.UserDao.deleteUser",UserId);//参数结束能获取配置信息的K
        //3.提交事务
        session.commit();
        session.close();
    }

    /**
     * 根据id查询用户信息
     *
     * @param UserId
     * @return
     */
    @Override
    public User findById(Integer UserId) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession 中的方法
        User selectOne = session.selectOne("com.xiaozheng.dao.UserDao.findById", UserId);
        //3.提交事务
        session.commit();
        session.close();
        return selectOne;
    }

    /**
     * 根据用户名模糊查询用户信息
     *
     * @param username
     * @return
     */
    @Override
    public List<User> findByName(String username) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession 中的方法
        List<User> findByName = session.selectList("com.xiaozheng.dao.UserDao.findByName", username);
        //3.提交事务
        session.commit();
        session.close();
        return findByName;
    }

    /**
     * 查询总用户数
     *
     * @return
     */
    @Override
    public int findTotal() {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession 中的方法
        Integer content = session.selectOne("com.xiaozheng.dao.UserDao.findTotal");
        //3.提交事务
        session.commit();
        session.close();
        return content;
    }
}
